#include <iostream>
#include <vector>
#include <queue>
using namespace std;



//int main()
//{
//    int n;
//    cin >> n;
//    int f1 = 0, f2 = 1, f3 = 1;
//
//    while (n > f3)
//    {
//        f1 = f2;
//        f2 = f3;
//        f3 = f1 + f2;
//    }
//
//
//    cout << min(f3 - n, n - f2) << endl;
//
//    return 0;
//}




//int dp[31][31];
//int main()
//{
//    int n;
//    cin >> n;
//    dp[1][1] = 1;
//    for (int i = 2; i <= n; i++)
//    {
//        for (int j = 1; j <= i; j++)
//        {
//            dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
//        }
//    }
//    for (int i = 1; i <= n; i++)
//    {
//        for (int j = 1; j <= i; j++)
//        {
//            printf("%5d", dp[i][j]);
//        }
//        printf("\n");
//    }
//    return 0;
//}



long long int n, k;
priority_queue<long long int> a;
int main()
{
    cin >> n >> k;
    long long int sum = 0, x;
    while (n)
    {
        cin >> x;
        sum += x;
        if (x % 2 == 0)
        {
            a.push(x);
        }
        n--;
    }
    int m = a.size();
    while (m && k--)
    {
        long long int t = a.top() / 2;
        a.pop();
        sum -= t;
        if (t % 2 == 0)
        {
            a.push(t);
        }
        m = a.size();
    }
    cout << sum << endl;
    return 0;
}

//int main()
//{
//    int n, q;
//    cin >> n >> q;
//    vector<long long int> a(n + 1);
//    vector<long long int> dp(n + 1);
//    for (int i = 1; i <= n; i++)
//    {
//        cin >> a[i];
//        dp[i] = dp[i - 1] + a[i];
//    }
//    while (q--)
//    {
//        int l, r;
//        cin >> l >> r;
//        cout << dp[r] - dp[l - 1] << endl;
//    }
//    return 0;
//}